<!doctype html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <title>dependency graph</title>
    <style>
      .node:active path,
.node:hover path,
.node.current path,
.node:active polygon,
.node:hover polygon,
.node.current polygon {
  stroke: fuchsia;
  stroke-width: 2;
}

.edge:active path,
.edge:hover path,
.edge.current path,
.edge:active ellipse,
.edge:hover ellipse,
.edge.current ellipse {
  stroke: url(#edgeGradient);
  stroke-width: 3;
  stroke-opacity: 1;
}

.edge:active polygon,
.edge:hover polygon,
.edge.current polygon {
  stroke: fuchsia;
  stroke-width: 3;
  fill: fuchsia;
  stroke-opacity: 1;
  fill-opacity: 1;
}

.edge:active text,
.edge:hover text {
  fill: fuchsia;
}

.cluster path {
  stroke-width: 3;
}

.cluster:active path,
.cluster:hover path {
  fill: #ffff0011;
}

div.hint {
  background-color: #000000aa;
  color: white;
  font-family: Arial, Helvetica, sans-serif;
  border-radius: 1rem;
  position: fixed;
  top: calc(50% - 4em);
  right: calc(50% - 10em);
  border: none;
  padding: 1em 3em 1em 1em;
}

.hint button {
  position: absolute;
  font-weight: bolder;
  right: 0.6em;
  top: 0.6em;
  color: inherit;
  background-color: inherit;
  border: 1px solid currentColor;
  border-radius: 1em;
  margin-left: 0.6em;
}

.hint a {
  color: inherit;
}

#button_help {
  color: white;
  background-color: #00000011;
  border-radius: 1em;
  position: fixed;
  top: 1em;
  right: 1em;
  font-size: 24pt;
  font-weight: bolder;
  width: 2em;
  height: 2em;
  border: none;
}

#button_help:hover {
  cursor: pointer;
  background-color: #00000077;
}

@media print {
  #button_help {
    display: none;
  }

  div.hint {
    display: none;
  }
}

    </style>
  </head>
  <body>
    <button id="button_help">?</button>
    <div id="hints" class="hint" style="display: none">
      <button id="close-hints">x</button>
      <span id="hint-text"></span>
      <ul>
        <li><b>Hover</b> - highlight</li>
        <li><b>Right-click</b> - pin highlight</li>
        <li><b>ESC</b> - clear</li>
      </ul>
    </div>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 9.0.0 (20230911.1827)
 -->
<!-- Title: dependency&#45;cruiser output Pages: 1 -->
<svg width="1372pt" height="734pt"
 viewBox="0.00 0.00 1371.50 734.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 730)">
<title>dependency&#45;cruiser output</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-730 1367.5,-730 1367.5,4 -4,4"/>
<!-- bin/smcat.mjs -->
<g id="node1" class="node">
<title>bin/smcat.mjs</title>
<g id="a_node1"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/bin/smcat.mjs" xlink:title="no&#45;orphans">
<path fill="#ccffcc" stroke="orange" d="M88.33,-438C88.33,-438 44.67,-438 44.67,-438 40.33,-438 36,-433.67 36,-429.33 36,-429.33 36,-420.67 36,-420.67 36,-416.33 40.33,-412 44.67,-412 44.67,-412 88.33,-412 88.33,-412 92.67,-412 97,-416.33 97,-420.67 97,-420.67 97,-429.33 97,-429.33 97,-433.67 92.67,-438 88.33,-438"/>
<text text-anchor="start" x="59" y="-426.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="orange">bin/</text>
<text text-anchor="start" x="44" y="-417.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00" fill="orange">smcat.mjs</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts -->
<g id="node2" class="node">
<title>src/cli/actions.mts</title>
<g id="a_node2"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/actions.mts" xlink:title="actions.mts">
<path fill="#ccffcc" stroke="black" d="M234.08,-438C234.08,-438 185.17,-438 185.17,-438 180.83,-438 176.5,-433.67 176.5,-429.33 176.5,-429.33 176.5,-420.67 176.5,-420.67 176.5,-416.33 180.83,-412 185.17,-412 185.17,-412 234.08,-412 234.08,-412 238.42,-412 242.75,-416.33 242.75,-420.67 242.75,-420.67 242.75,-429.33 242.75,-429.33 242.75,-433.67 238.42,-438 234.08,-438"/>
<text text-anchor="start" x="196.88" y="-426.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="184.5" y="-417.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">actions.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts -->
<g id="node3" class="node">
<title>src/index&#45;node.mts</title>
<g id="a_node3"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/index-node.mts" xlink:title="index&#45;node.mts">
<path fill="#ddfeff" stroke="black" d="M378.33,-438C378.33,-438 313.67,-438 313.67,-438 309.33,-438 305,-433.67 305,-429.33 305,-429.33 305,-420.67 305,-420.67 305,-416.33 309.33,-412 313.67,-412 313.67,-412 378.33,-412 378.33,-412 382.67,-412 387,-416.33 387,-420.67 387,-420.67 387,-429.33 387,-429.33 387,-433.67 382.67,-438 378.33,-438"/>
<text text-anchor="start" x="338.88" y="-426.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/</text>
<text text-anchor="start" x="313" y="-417.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index&#45;node.mts</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts&#45;&gt;src/index&#45;node.mts -->
<g id="edge1" class="edge">
<title>src/cli/actions.mts&#45;&gt;src/index&#45;node.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M242.99,-422.4C242.99,-422.4 295.67,-422.4 295.67,-422.4"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="295.67,-424.5 301.67,-422.4 295.67,-420.3 295.67,-424.5"/>
</g>
<!-- src/cli/cli.d.ts -->
<g id="node4" class="node">
<title>src/cli/cli.d.ts</title>
<g id="a_node4"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/cli.d.ts" xlink:title="cli.d.ts">
<path fill="#ccffcc" stroke="none" d="M364.33,-476C364.33,-476 327.67,-476 327.67,-476 323.33,-476 319,-471.67 319,-467.33 319,-467.33 319,-458.67 319,-458.67 319,-454.33 323.33,-450 327.67,-450 327.67,-450 364.33,-450 364.33,-450 368.67,-450 373,-454.33 373,-458.67 373,-458.67 373,-467.33 373,-467.33 373,-471.67 368.67,-476 364.33,-476"/>
<text text-anchor="start" x="333.25" y="-464.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="332.12" y="-455.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">cli.d.ts</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts&#45;&gt;src/cli/cli.d.ts -->
<g id="edge2" class="edge">
<title>src/cli/actions.mts&#45;&gt;src/cli/cli.d.ts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M243.2,-427.6C259.03,-427.6 274.5,-427.6 274.5,-427.6 274.5,-427.6 274.5,-455.2 274.5,-455.2 274.5,-455.2 309.53,-455.2 309.53,-455.2"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="309.53,-457.3 315.53,-455.2 309.53,-453.1 309.53,-457.3"/>
</g>
<!-- src/cli/file&#45;name&#45;to&#45;stream.mts -->
<g id="node5" class="node">
<title>src/cli/file&#45;name&#45;to&#45;stream.mts</title>
<g id="a_node5"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/file-name-to-stream.mts" xlink:title="file&#45;name&#45;to&#45;stream.mts">
<path fill="#ccffcc" stroke="black" d="M397.08,-400C397.08,-400 294.92,-400 294.92,-400 290.58,-400 286.25,-395.67 286.25,-391.33 286.25,-391.33 286.25,-382.67 286.25,-382.67 286.25,-378.33 290.58,-374 294.92,-374 294.92,-374 397.08,-374 397.08,-374 401.42,-374 405.75,-378.33 405.75,-382.67 405.75,-382.67 405.75,-391.33 405.75,-391.33 405.75,-395.67 401.42,-400 397.08,-400"/>
<text text-anchor="start" x="333.25" y="-388.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="294.25" y="-379.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">file&#45;name&#45;to&#45;stream.mts</text>
</a>
</g>
</g>
<!-- src/cli/actions.mts&#45;&gt;src/cli/file&#45;name&#45;to&#45;stream.mts -->
<g id="edge3" class="edge">
<title>src/cli/actions.mts&#45;&gt;src/cli/file&#45;name&#45;to&#45;stream.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M243.05,-417.2C269.32,-417.2 301.5,-417.2 301.5,-417.2 301.5,-417.2 301.5,-409.36 301.5,-409.36"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="303.6,-409.36 301.5,-403.36 299.4,-409.36 303.6,-409.36"/>
</g>
<!-- src/options.mts -->
<g id="node10" class="node">
<title>src/options.mts</title>
<g id="a_node10"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/options.mts" xlink:title="options.mts">
<path fill="#ddfeff" stroke="black" d="M1011.58,-484C1011.58,-484 962.67,-484 962.67,-484 958.33,-484 954,-479.67 954,-475.33 954,-475.33 954,-466.67 954,-466.67 954,-462.33 958.33,-458 962.67,-458 962.67,-458 1011.58,-458 1011.58,-458 1015.92,-458 1020.25,-462.33 1020.25,-466.67 1020.25,-466.67 1020.25,-475.33 1020.25,-475.33 1020.25,-479.67 1015.92,-484 1011.58,-484"/>
<text text-anchor="start" x="980" y="-472.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/</text>
<text text-anchor="start" x="962" y="-463.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">options.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/options.mts -->
<g id="edge13" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M383.5,-438.46C383.5,-452.47 383.5,-472.4 383.5,-472.4 383.5,-472.4 944.78,-472.4 944.78,-472.4"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.78,-474.5 950.78,-472.4 944.78,-470.3 944.78,-474.5"/>
</g>
<!-- src/parse/index.mts -->
<g id="node11" class="node">
<title>src/parse/index.mts</title>
<g id="a_node11"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/index.mts" xlink:title="index.mts">
<path fill="#ffccff" stroke="black" d="M503.08,-576C503.08,-576 462.42,-576 462.42,-576 458.08,-576 453.75,-571.67 453.75,-567.33 453.75,-567.33 453.75,-558.67 453.75,-558.67 453.75,-554.33 458.08,-550 462.42,-550 462.42,-550 503.08,-550 503.08,-550 507.42,-550 511.75,-554.33 511.75,-558.67 511.75,-558.67 511.75,-567.33 511.75,-567.33 511.75,-571.67 507.42,-576 503.08,-576"/>
<text text-anchor="start" x="462.88" y="-564.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/</text>
<text text-anchor="start" x="461.75" y="-555.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/parse/index.mts -->
<g id="edge14" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/parse/index.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M387.28,-434C411.15,-434 436.5,-434 436.5,-434 436.5,-434 436.5,-560 436.5,-560 436.5,-560 444.43,-560 444.43,-560"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="444.43,-562.1 450.43,-560 444.43,-557.9 444.43,-562.1"/>
</g>
<!-- src/render/index&#45;node.mts -->
<g id="node12" class="node">
<title>src/render/index&#45;node.mts</title>
<g id="a_node12"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/index-node.mts" xlink:title="index&#45;node.mts">
<path fill="#ccccff" stroke="black" d="M515.08,-328C515.08,-328 450.42,-328 450.42,-328 446.08,-328 441.75,-323.67 441.75,-319.33 441.75,-319.33 441.75,-310.67 441.75,-310.67 441.75,-306.33 446.08,-302 450.42,-302 450.42,-302 515.08,-302 515.08,-302 519.42,-302 523.75,-306.33 523.75,-310.67 523.75,-310.67 523.75,-319.33 523.75,-319.33 523.75,-323.67 519.42,-328 515.08,-328"/>
<text text-anchor="start" x="461" y="-316.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/</text>
<text text-anchor="start" x="449.75" y="-307.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index&#45;node.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/render/index&#45;node.mts -->
<g id="edge15" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/render/index&#45;node.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M387.36,-417.33C400.88,-417.33 412.5,-417.33 412.5,-417.33 412.5,-417.33 412.5,-315 412.5,-315 412.5,-315 432.45,-315 432.45,-315"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="432.45,-317.1 438.45,-315 432.45,-312.9 432.45,-317.1"/>
</g>
<!-- src/transform/desugar.mts -->
<g id="node13" class="node">
<title>src/transform/desugar.mts</title>
<g id="a_node13"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/transform/desugar.mts" xlink:title="desugar.mts">
<path fill="#ddfeff" stroke="black" d="M509.46,-514C509.46,-514 456.04,-514 456.04,-514 451.71,-514 447.38,-509.67 447.38,-505.33 447.38,-505.33 447.38,-496.67 447.38,-496.67 447.38,-492.33 451.71,-488 456.04,-488 456.04,-488 509.46,-488 509.46,-488 513.79,-488 518.12,-492.33 518.12,-496.67 518.12,-496.67 518.12,-505.33 518.12,-505.33 518.12,-509.67 513.79,-514 509.46,-514"/>
<text text-anchor="start" x="455.38" y="-502.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/transform/</text>
<text text-anchor="start" x="456.12" y="-493.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">desugar.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/transform/desugar.mts -->
<g id="edge16" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/transform/desugar.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M379.5,-438.24C379.5,-460.01 379.5,-501 379.5,-501 379.5,-501 437.9,-501 437.9,-501"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="437.9,-503.1 443.9,-501 437.9,-498.9 437.9,-503.1"/>
</g>
<!-- src/version.mts -->
<g id="node14" class="node">
<title>src/version.mts</title>
<g id="a_node14"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/version.mts" xlink:title="version.mts">
<path fill="#ddfeff" stroke="black" d="M507.58,-376C507.58,-376 457.92,-376 457.92,-376 453.58,-376 449.25,-371.67 449.25,-367.33 449.25,-367.33 449.25,-358.67 449.25,-358.67 449.25,-354.33 453.58,-350 457.92,-350 457.92,-350 507.58,-350 507.58,-350 511.92,-350 516.25,-354.33 516.25,-358.67 516.25,-358.67 516.25,-367.33 516.25,-367.33 516.25,-371.67 511.92,-376 507.58,-376"/>
<text text-anchor="start" x="475.62" y="-364.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/</text>
<text text-anchor="start" x="457.25" y="-355.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">version.mts</text>
</a>
</g>
</g>
<!-- src/index&#45;node.mts&#45;&gt;src/version.mts -->
<g id="edge17" class="edge">
<title>src/index&#45;node.mts&#45;&gt;src/version.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M387.33,-420.67C403.61,-420.67 418.5,-420.67 418.5,-420.67 418.5,-420.67 418.5,-358 418.5,-358 418.5,-358 440.09,-358 440.09,-358"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="440.09,-360.1 446.09,-358 440.09,-355.9 440.09,-360.1"/>
</g>
<!-- src/cli/attributes&#45;parser.mjs -->
<g id="node6" class="node">
<title>src/cli/attributes&#45;parser.mjs</title>
<g id="a_node6"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/attributes-parser.mjs" xlink:title="attributes&#45;parser.mjs">
<polygon fill="#ccffcc" stroke="gray" points="399,-552 293,-552 293,-526 399,-526 399,-552"/>
<text text-anchor="start" x="333.25" y="-540.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="301" y="-531.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">attributes&#45;parser.mjs</text>
</a>
</g>
</g>
<!-- src/cli/execute&#45;command&#45;line.mts -->
<g id="node7" class="node">
<title>src/cli/execute&#45;command&#45;line.mts</title>
<g id="a_node7"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/execute-command-line.mts" xlink:title="execute&#45;command&#45;line.mts">
<path fill="#ccffcc" stroke="black" d="M124.33,-476C124.33,-476 8.67,-476 8.67,-476 4.33,-476 0,-471.67 0,-467.33 0,-467.33 0,-458.67 0,-458.67 0,-454.33 4.33,-450 8.67,-450 8.67,-450 124.33,-450 124.33,-450 128.67,-450 133,-454.33 133,-458.67 133,-458.67 133,-467.33 133,-467.33 133,-471.67 128.67,-476 124.33,-476"/>
<text text-anchor="start" x="53.75" y="-464.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="8" y="-455.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">execute&#45;command&#45;line.mts</text>
</a>
</g>
</g>
<!-- src/cli/execute&#45;command&#45;line.mts&#45;&gt;src/cli/actions.mts -->
<g id="edge4" class="edge">
<title>src/cli/execute&#45;command&#45;line.mts&#45;&gt;src/cli/actions.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M115.5,-449.71C115.5,-438.75 115.5,-425 115.5,-425 115.5,-425 167.15,-425 167.15,-425"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="167.15,-427.1 173.15,-425 167.15,-422.9 167.15,-427.1"/>
</g>
<!-- src/cli/normalize.mts -->
<g id="node8" class="node">
<title>src/cli/normalize.mts</title>
<g id="a_node8"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/normalize.mts" xlink:title="normalize.mts">
<path fill="#ccffcc" stroke="black" d="M239.33,-533C239.33,-533 179.92,-533 179.92,-533 175.58,-533 171.25,-528.67 171.25,-524.33 171.25,-524.33 171.25,-515.67 171.25,-515.67 171.25,-511.33 175.58,-507 179.92,-507 179.92,-507 239.33,-507 239.33,-507 243.67,-507 248,-511.33 248,-515.67 248,-515.67 248,-524.33 248,-524.33 248,-528.67 243.67,-533 239.33,-533"/>
<text text-anchor="start" x="196.88" y="-521.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="179.25" y="-512.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">normalize.mts</text>
</a>
</g>
</g>
<!-- src/cli/execute&#45;command&#45;line.mts&#45;&gt;src/cli/normalize.mts -->
<g id="edge5" class="edge">
<title>src/cli/execute&#45;command&#45;line.mts&#45;&gt;src/cli/normalize.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M66.5,-476.22C66.5,-493.06 66.5,-520 66.5,-520 66.5,-520 161.87,-520 161.87,-520"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="161.87,-522.1 167.87,-520 161.87,-517.9 161.87,-522.1"/>
</g>
<!-- src/cli/validations.mts -->
<g id="node9" class="node">
<title>src/cli/validations.mts</title>
<g id="a_node9"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/cli/validations.mts" xlink:title="validations.mts">
<path fill="#ccffcc" stroke="black" d="M241.58,-476C241.58,-476 177.67,-476 177.67,-476 173.33,-476 169,-471.67 169,-467.33 169,-467.33 169,-458.67 169,-458.67 169,-454.33 173.33,-450 177.67,-450 177.67,-450 241.58,-450 241.58,-450 245.92,-450 250.25,-454.33 250.25,-458.67 250.25,-458.67 250.25,-467.33 250.25,-467.33 250.25,-471.67 245.92,-476 241.58,-476"/>
<text text-anchor="start" x="196.88" y="-464.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/cli/</text>
<text text-anchor="start" x="177" y="-455.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">validations.mts</text>
</a>
</g>
</g>
<!-- src/cli/execute&#45;command&#45;line.mts&#45;&gt;src/cli/validations.mts -->
<g id="edge6" class="edge">
<title>src/cli/execute&#45;command&#45;line.mts&#45;&gt;src/cli/validations.mts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M133.45,-463C133.45,-463 159.8,-463 159.8,-463"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="159.8,-465.1 165.8,-463 159.8,-460.9 159.8,-465.1"/>
</g>
<!-- src/cli/normalize.mts&#45;&gt;src/cli/cli.d.ts -->
<g id="edge9" class="edge">
<title>src/cli/normalize.mts&#45;&gt;src/cli/cli.d.ts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M248.33,-510.5C256.39,-510.5 262.5,-510.5 262.5,-510.5 262.5,-510.5 262.5,-470.8 262.5,-470.8 262.5,-470.8 309.63,-470.8 309.63,-470.8"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="309.63,-472.9 315.63,-470.8 309.63,-468.7 309.63,-472.9"/>
</g>
<!-- src/cli/normalize.mts&#45;&gt;src/cli/attributes&#45;parser.mjs -->
<g id="edge8" class="edge">
<title>src/cli/normalize.mts&#45;&gt;src/cli/attributes&#45;parser.mjs</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M248.34,-529.5C248.34,-529.5 283.65,-529.5 283.65,-529.5"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="283.65,-531.6 289.65,-529.5 283.65,-527.4 283.65,-531.6"/>
</g>
<!-- src/cli/normalize.mts&#45;&gt;src/options.mts -->
<g id="edge7" class="edge">
<title>src/cli/normalize.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M210.5,-506.71C210.5,-494.41 210.5,-478 210.5,-478 210.5,-478 944.48,-478 944.48,-478"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.48,-480.1 950.48,-478 944.48,-475.9 944.48,-480.1"/>
</g>
<!-- src/cli/validations.mts&#45;&gt;src/index&#45;node.mts -->
<g id="edge10" class="edge">
<title>src/cli/validations.mts&#45;&gt;src/index&#45;node.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M246.5,-449.67C246.5,-441.58 246.5,-432.8 246.5,-432.8 246.5,-432.8 295.64,-432.8 295.64,-432.8"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="295.64,-434.9 301.64,-432.8 295.64,-430.7 295.64,-434.9"/>
</g>
<!-- src/cli/validations.mts&#45;&gt;src/cli/cli.d.ts -->
<g id="edge12" class="edge">
<title>src/cli/validations.mts&#45;&gt;src/cli/cli.d.ts</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M250.54,-460.4C250.54,-460.4 309.88,-460.4 309.88,-460.4"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="309.88,-462.5 315.88,-460.4 309.88,-458.3 309.88,-462.5"/>
</g>
<!-- src/cli/validations.mts&#45;&gt;src/cli/attributes&#45;parser.mjs -->
<g id="edge11" class="edge">
<title>src/cli/validations.mts&#45;&gt;src/cli/attributes&#45;parser.mjs</title>
<path fill="none" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" d="M250.73,-465.6C273.6,-465.6 297.5,-465.6 297.5,-465.6 297.5,-465.6 297.5,-516.51 297.5,-516.51"/>
<polygon fill="#007700" fill-opacity="0.466667" stroke="#007700" stroke-width="2" stroke-opacity="0.466667" points="295.4,-516.51 297.5,-522.51 299.6,-516.51 295.4,-516.51"/>
</g>
<!-- src/parse/index.mts&#45;&gt;src/options.mts -->
<g id="edge23" class="edge">
<title>src/parse/index.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M511.92,-559.5C527.09,-559.5 542.5,-559.5 542.5,-559.5 542.5,-559.5 542.5,-482 542.5,-482 542.5,-482 944.68,-482 944.68,-482"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.68,-484.1 950.68,-482 944.68,-479.9 944.68,-484.1"/>
</g>
<!-- src/parse/scxml/index.mjs -->
<g id="node17" class="node">
<title>src/parse/scxml/index.mjs</title>
<g id="a_node17"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/index.mjs" xlink:title="index.mjs">
<path fill="#ffccff" stroke="black" d="M674.33,-694C674.33,-694 610.42,-694 610.42,-694 606.08,-694 601.75,-689.67 601.75,-685.33 601.75,-685.33 601.75,-676.67 601.75,-676.67 601.75,-672.33 606.08,-668 610.42,-668 610.42,-668 674.33,-668 674.33,-668 678.67,-668 683,-672.33 683,-676.67 683,-676.67 683,-685.33 683,-685.33 683,-689.67 678.67,-694 674.33,-694"/>
<text text-anchor="start" x="609.75" y="-682.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/scxml/</text>
<text text-anchor="start" x="621.75" y="-673.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mjs</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/parse/scxml/index.mjs -->
<g id="edge24" class="edge">
<title>src/parse/index.mts&#45;&gt;src/parse/scxml/index.mjs</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M473.5,-576.08C473.5,-606.8 473.5,-681 473.5,-681 473.5,-681 592.47,-681 592.47,-681"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="592.47,-683.1 598.47,-681 592.47,-678.9 592.47,-683.1"/>
</g>
<!-- src/parse/smcat&#45;ast.schema.mts -->
<g id="node18" class="node">
<title>src/parse/smcat&#45;ast.schema.mts</title>
<g id="a_node18"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/smcat-ast.schema.mts" xlink:title="smcat&#45;ast.schema.mts">
<path fill="#ffccff" stroke="black" d="M691.21,-592C691.21,-592 593.54,-592 593.54,-592 589.21,-592 584.88,-587.67 584.88,-583.33 584.88,-583.33 584.88,-574.67 584.88,-574.67 584.88,-570.33 589.21,-566 593.54,-566 593.54,-566 691.21,-566 691.21,-566 695.54,-566 699.88,-570.33 699.88,-574.67 699.88,-574.67 699.88,-583.33 699.88,-583.33 699.88,-587.67 695.54,-592 691.21,-592"/>
<text text-anchor="start" x="622.5" y="-580.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/</text>
<text text-anchor="start" x="592.88" y="-571.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">smcat&#45;ast.schema.mts</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/parse/smcat&#45;ast.schema.mts -->
<g id="edge25" class="edge">
<title>src/parse/index.mts&#45;&gt;src/parse/smcat&#45;ast.schema.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M512.03,-571C512.03,-571 575.48,-571 575.48,-571"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="575.48,-573.1 581.48,-571 575.48,-568.9 575.48,-573.1"/>
</g>
<!-- src/parse/smcat/smcat&#45;parser.mjs -->
<g id="node19" class="node">
<title>src/parse/smcat/smcat&#45;parser.mjs</title>
<g id="a_node19"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/smcat/smcat-parser.mjs" xlink:title="smcat&#45;parser.mjs">
<polygon fill="#ffccff" stroke="gray" points="688.25,-656 596.5,-656 596.5,-630 688.25,-630 688.25,-656"/>
<text text-anchor="start" x="609.38" y="-644.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/smcat/</text>
<text text-anchor="start" x="604.5" y="-635.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">smcat&#45;parser.mjs</text>
</a>
</g>
</g>
<!-- src/parse/index.mts&#45;&gt;src/parse/smcat/smcat&#45;parser.mjs -->
<g id="edge26" class="edge">
<title>src/parse/index.mts&#45;&gt;src/parse/smcat/smcat&#45;parser.mjs</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M492.5,-576.21C492.5,-598.93 492.5,-643 492.5,-643 492.5,-643 587.16,-643 587.16,-643"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="587.16,-645.1 593.16,-643 587.16,-640.9 587.16,-645.1"/>
</g>
<!-- src/render/dot/index.mjs -->
<g id="node31" class="node">
<title>src/render/dot/index.mjs</title>
<g id="a_node31"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/index.mjs" xlink:title="index.mjs">
<path fill="#ccccff" stroke="black" d="M849.33,-206C849.33,-206 792.17,-206 792.17,-206 787.83,-206 783.5,-201.67 783.5,-197.33 783.5,-197.33 783.5,-188.67 783.5,-188.67 783.5,-184.33 787.83,-180 792.17,-180 792.17,-180 849.33,-180 849.33,-180 853.67,-180 858,-184.33 858,-188.67 858,-188.67 858,-197.33 858,-197.33 858,-201.67 853.67,-206 849.33,-206"/>
<text text-anchor="start" x="791.5" y="-194.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="800.12" y="-185.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mjs</text>
</a>
</g>
</g>
<!-- src/render/index&#45;node.mts&#45;&gt;src/render/dot/index.mjs -->
<g id="edge50" class="edge">
<title>src/render/index&#45;node.mts&#45;&gt;src/render/dot/index.mjs</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M524.04,-313C595.46,-313 734.5,-313 734.5,-313 734.5,-313 734.5,-193 734.5,-193 734.5,-193 774.14,-193 774.14,-193"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="774.14,-195.1 780.14,-193 774.14,-190.9 774.14,-195.1"/>
</g>
<!-- src/render/scjson/index.mts -->
<g id="node36" class="node">
<title>src/render/scjson/index.mts</title>
<g id="a_node36"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M856.08,-334C856.08,-334 785.42,-334 785.42,-334 781.08,-334 776.75,-329.67 776.75,-325.33 776.75,-325.33 776.75,-316.67 776.75,-316.67 776.75,-312.33 781.08,-308 785.42,-308 785.42,-308 856.08,-308 856.08,-308 860.42,-308 864.75,-312.33 864.75,-316.67 864.75,-316.67 864.75,-325.33 864.75,-325.33 864.75,-329.67 860.42,-334 856.08,-334"/>
<text text-anchor="start" x="784.75" y="-322.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scjson/</text>
<text text-anchor="start" x="799.75" y="-313.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/render/index&#45;node.mts&#45;&gt;src/render/scjson/index.mts -->
<g id="edge51" class="edge">
<title>src/render/index&#45;node.mts&#45;&gt;src/render/scjson/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M524.2,-318C524.2,-318 767.25,-318 767.25,-318"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="767.25,-320.1 773.25,-318 767.25,-315.9 767.25,-320.1"/>
</g>
<!-- src/render/scxml/index.mts -->
<g id="node37" class="node">
<title>src/render/scxml/index.mts</title>
<g id="a_node37"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scxml/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M676.21,-296C676.21,-296 608.54,-296 608.54,-296 604.21,-296 599.88,-291.67 599.88,-287.33 599.88,-287.33 599.88,-278.67 599.88,-278.67 599.88,-274.33 604.21,-270 608.54,-270 608.54,-270 676.21,-270 676.21,-270 680.54,-270 684.88,-274.33 684.88,-278.67 684.88,-278.67 684.88,-287.33 684.88,-287.33 684.88,-291.67 680.54,-296 676.21,-296"/>
<text text-anchor="start" x="607.88" y="-284.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scxml/</text>
<text text-anchor="start" x="621.38" y="-275.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/render/index&#45;node.mts&#45;&gt;src/render/scxml/index.mts -->
<g id="edge52" class="edge">
<title>src/render/index&#45;node.mts&#45;&gt;src/render/scxml/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M483.5,-301.88C483.5,-291.48 483.5,-278.67 483.5,-278.67 483.5,-278.67 590.35,-278.67 590.35,-278.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="590.35,-280.77 596.35,-278.67 590.35,-276.57 590.35,-280.77"/>
</g>
<!-- src/render/smcat/index.mts -->
<g id="node38" class="node">
<title>src/render/smcat/index.mts</title>
<g id="a_node38"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/smcat/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M676.58,-398C676.58,-398 608.17,-398 608.17,-398 603.83,-398 599.5,-393.67 599.5,-389.33 599.5,-389.33 599.5,-380.67 599.5,-380.67 599.5,-376.33 603.83,-372 608.17,-372 608.17,-372 676.58,-372 676.58,-372 680.92,-372 685.25,-376.33 685.25,-380.67 685.25,-380.67 685.25,-389.33 685.25,-389.33 685.25,-393.67 680.92,-398 676.58,-398"/>
<text text-anchor="start" x="607.5" y="-386.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/smcat/</text>
<text text-anchor="start" x="621.38" y="-377.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/render/index&#45;node.mts&#45;&gt;src/render/smcat/index.mts -->
<g id="edge53" class="edge">
<title>src/render/index&#45;node.mts&#45;&gt;src/render/smcat/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M524.2,-325.5C550.85,-325.5 580.5,-325.5 580.5,-325.5 580.5,-325.5 580.5,-382 580.5,-382 580.5,-382 590.04,-382 590.04,-382"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="590.04,-384.1 596.04,-382 590.04,-379.9 590.04,-384.1"/>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts -->
<g id="node39" class="node">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts</title>
<g id="a_node39"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/vector/vector-native-dot-with-fallback.mts" xlink:title="vector&#45;native&#45;dot&#45;with&#45;fallback.mts">
<path fill="#ccccff" stroke="black" d="M716.33,-206C716.33,-206 568.42,-206 568.42,-206 564.08,-206 559.75,-201.67 559.75,-197.33 559.75,-197.33 559.75,-188.67 559.75,-188.67 559.75,-184.33 564.08,-180 568.42,-180 568.42,-180 716.33,-180 716.33,-180 720.67,-180 725,-184.33 725,-188.67 725,-188.67 725,-197.33 725,-197.33 725,-201.67 720.67,-206 716.33,-206"/>
<text text-anchor="start" x="607.12" y="-194.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/vector/</text>
<text text-anchor="start" x="567.75" y="-185.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">vector&#45;native&#45;dot&#45;with&#45;fallback.mts</text>
</a>
</g>
</g>
<!-- src/render/index&#45;node.mts&#45;&gt;src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts -->
<g id="edge54" class="edge">
<title>src/render/index&#45;node.mts&#45;&gt;src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M524.12,-310.5C544.81,-310.5 565.5,-310.5 565.5,-310.5 565.5,-310.5 565.5,-215.51 565.5,-215.51"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="567.6,-215.51 565.5,-209.51 563.4,-215.51 567.6,-215.51"/>
</g>
<!-- src/render/vector/vector&#45;with&#45;wasm.mts -->
<g id="node40" class="node">
<title>src/render/vector/vector&#45;with&#45;wasm.mts</title>
<g id="a_node40"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/vector/vector-with-wasm.mts" xlink:title="vector&#45;with&#45;wasm.mts">
<path fill="#ccccff" stroke="black" d="M689.33,-360C689.33,-360 595.42,-360 595.42,-360 591.08,-360 586.75,-355.67 586.75,-351.33 586.75,-351.33 586.75,-342.67 586.75,-342.67 586.75,-338.33 591.08,-334 595.42,-334 595.42,-334 689.33,-334 689.33,-334 693.67,-334 698,-338.33 698,-342.67 698,-342.67 698,-351.33 698,-351.33 698,-355.67 693.67,-360 689.33,-360"/>
<text text-anchor="start" x="607.12" y="-348.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/vector/</text>
<text text-anchor="start" x="594.75" y="-339.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">vector&#45;with&#45;wasm.mts</text>
</a>
</g>
</g>
<!-- src/render/index&#45;node.mts&#45;&gt;src/render/vector/vector&#45;with&#45;wasm.mts -->
<g id="edge55" class="edge">
<title>src/render/index&#45;node.mts&#45;&gt;src/render/vector/vector&#45;with&#45;wasm.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M523.99,-323C555.48,-323 593.5,-323 593.5,-323 593.5,-323 593.5,-324.57 593.5,-324.57"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="591.4,-324.57 593.5,-330.57 595.6,-324.57 591.4,-324.57"/>
</g>
<!-- src/state&#45;machine&#45;model.mts -->
<g id="node21" class="node">
<title>src/state&#45;machine&#45;model.mts</title>
<g id="a_node21"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/state-machine-model.mts" xlink:title="state&#45;machine&#45;model.mts">
<path fill="#ddfeff" stroke="black" d="M1354.83,-452C1354.83,-452 1246.67,-452 1246.67,-452 1242.33,-452 1238,-447.67 1238,-443.33 1238,-443.33 1238,-434.67 1238,-434.67 1238,-430.33 1242.33,-426 1246.67,-426 1246.67,-426 1354.83,-426 1354.83,-426 1359.17,-426 1363.5,-430.33 1363.5,-434.67 1363.5,-434.67 1363.5,-443.33 1363.5,-443.33 1363.5,-447.67 1359.17,-452 1354.83,-452"/>
<text text-anchor="start" x="1293.62" y="-440.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/</text>
<text text-anchor="start" x="1246" y="-431.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">state&#45;machine&#45;model.mts</text>
</a>
</g>
</g>
<!-- src/transform/desugar.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge75" class="edge">
<title>src/transform/desugar.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M483.5,-487.61C483.5,-470.2 483.5,-442 483.5,-442 483.5,-442 1228.61,-442 1228.61,-442"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1228.61,-444.1 1234.61,-442 1228.61,-439.9 1228.61,-444.1"/>
</g>
<!-- src/transform/utl.mts -->
<g id="node22" class="node">
<title>src/transform/utl.mts</title>
<g id="a_node22"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/transform/utl.mts" xlink:title="utl.mts">
<path fill="#ddfeff" stroke="black" d="M847.46,-579C847.46,-579 794.04,-579 794.04,-579 789.71,-579 785.38,-574.67 785.38,-570.33 785.38,-570.33 785.38,-561.67 785.38,-561.67 785.38,-557.33 789.71,-553 794.04,-553 794.04,-553 847.46,-553 847.46,-553 851.79,-553 856.12,-557.33 856.12,-561.67 856.12,-561.67 856.12,-570.33 856.12,-570.33 856.12,-574.67 851.79,-579 847.46,-579"/>
<text text-anchor="start" x="793.38" y="-567.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/transform/</text>
<text text-anchor="start" x="806.12" y="-558.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">utl.mts</text>
</a>
</g>
</g>
<!-- src/transform/desugar.mts&#45;&gt;src/transform/utl.mts -->
<g id="edge76" class="edge">
<title>src/transform/desugar.mts&#45;&gt;src/transform/utl.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M518.36,-501C605.33,-501 821.5,-501 821.5,-501 821.5,-501 821.5,-543.5 821.5,-543.5"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="819.4,-543.5 821.5,-549.5 823.6,-543.5 819.4,-543.5"/>
</g>
<!-- src/index.mts -->
<g id="node15" class="node">
<title>src/index.mts</title>
<g id="a_node15"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/index.mts" xlink:title="index.mts">
<path fill="#ddfeff" stroke="black" d="M366.33,-514C366.33,-514 325.67,-514 325.67,-514 321.33,-514 317,-509.67 317,-505.33 317,-505.33 317,-496.67 317,-496.67 317,-492.33 321.33,-488 325.67,-488 325.67,-488 366.33,-488 366.33,-488 370.67,-488 375,-492.33 375,-496.67 375,-496.67 375,-505.33 375,-505.33 375,-509.67 370.67,-514 366.33,-514"/>
<text text-anchor="start" x="338.88" y="-502.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/</text>
<text text-anchor="start" x="325" y="-493.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/index.mts&#45;&gt;src/options.mts -->
<g id="edge18" class="edge">
<title>src/index.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M346.5,-487.58C346.5,-483.47 346.5,-480 346.5,-480 346.5,-480 944.56,-480 944.56,-480"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.56,-482.1 950.56,-480 944.56,-477.9 944.56,-482.1"/>
</g>
<!-- src/index.mts&#45;&gt;src/parse/index.mts -->
<g id="edge19" class="edge">
<title>src/index.mts&#45;&gt;src/parse/index.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M375.08,-509.67C399.52,-509.67 430.5,-509.67 430.5,-509.67 430.5,-509.67 430.5,-568 430.5,-568 430.5,-568 444.24,-568 444.24,-568"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="444.24,-570.1 450.24,-568 444.24,-565.9 444.24,-570.1"/>
</g>
<!-- src/index.mts&#45;&gt;src/transform/desugar.mts -->
<g id="edge21" class="edge">
<title>src/index.mts&#45;&gt;src/transform/desugar.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M375.34,-505.33C375.34,-505.33 437.87,-505.33 437.87,-505.33"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="437.87,-507.43 443.87,-505.33 437.87,-503.23 437.87,-507.43"/>
</g>
<!-- src/index.mts&#45;&gt;src/version.mts -->
<g id="edge22" class="edge">
<title>src/index.mts&#45;&gt;src/version.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M375.23,-496.67C397.55,-496.67 424.5,-496.67 424.5,-496.67 424.5,-496.67 424.5,-366 424.5,-366 424.5,-366 439.84,-366 439.84,-366"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="439.84,-368.1 445.84,-366 439.84,-363.9 439.84,-368.1"/>
</g>
<!-- src/render/index.mts -->
<g id="node16" class="node">
<title>src/render/index.mts</title>
<g id="a_node16"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/index.mts" xlink:title="index.mts">
<path fill="#ccccff" stroke="black" d="M503.83,-414C503.83,-414 461.67,-414 461.67,-414 457.33,-414 453,-409.67 453,-405.33 453,-405.33 453,-396.67 453,-396.67 453,-392.33 457.33,-388 461.67,-388 461.67,-388 503.83,-388 503.83,-388 508.17,-388 512.5,-392.33 512.5,-396.67 512.5,-396.67 512.5,-405.33 512.5,-405.33 512.5,-409.67 508.17,-414 503.83,-414"/>
<text text-anchor="start" x="461" y="-402.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/</text>
<text text-anchor="start" x="461.75" y="-393.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">index.mts</text>
</a>
</g>
</g>
<!-- src/index.mts&#45;&gt;src/render/index.mts -->
<g id="edge20" class="edge">
<title>src/index.mts&#45;&gt;src/render/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M375.27,-492.33C385.05,-492.33 393.5,-492.33 393.5,-492.33 393.5,-492.33 393.5,-406 393.5,-406 393.5,-406 443.51,-406 443.51,-406"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="443.51,-408.1 449.51,-406 443.51,-403.9 443.51,-408.1"/>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/dot/index.mjs -->
<g id="edge56" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/dot/index.mjs</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M512.91,-403.33C583.3,-403.33 752.5,-403.33 752.5,-403.33 752.5,-403.33 752.5,-201.67 752.5,-201.67 752.5,-201.67 774,-201.67 774,-201.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="774,-203.77 780,-201.67 774,-199.57 774,-203.77"/>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/scjson/index.mts -->
<g id="edge57" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/scjson/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M512.86,-392C539.95,-392 575.5,-392 575.5,-392 575.5,-392 575.5,-320.5 575.5,-320.5 575.5,-320.5 767.31,-320.5 767.31,-320.5"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="767.31,-322.6 773.31,-320.5 767.31,-318.4 767.31,-322.6"/>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/scxml/index.mts -->
<g id="edge58" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/scxml/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M512.95,-390C538.33,-390 570.5,-390 570.5,-390 570.5,-390 570.5,-287.33 570.5,-287.33 570.5,-287.33 590.71,-287.33 590.71,-287.33"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="590.71,-289.43 596.71,-287.33 590.71,-285.23 590.71,-289.43"/>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/smcat/index.mts -->
<g id="edge59" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/smcat/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M512.77,-396C512.77,-396 590.2,-396 590.2,-396"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="590.2,-398.1 596.2,-396 590.2,-393.9 590.2,-398.1"/>
</g>
<!-- src/render/index.mts&#45;&gt;src/render/vector/vector&#45;with&#45;wasm.mts -->
<g id="edge60" class="edge">
<title>src/render/index.mts&#45;&gt;src/render/vector/vector&#45;with&#45;wasm.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M512.72,-394C545.52,-394 593.5,-394 593.5,-394 593.5,-394 593.5,-369.37 593.5,-369.37"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="595.6,-369.37 593.5,-363.37 591.4,-369.37 595.6,-369.37"/>
</g>
<!-- src/parse/parser&#45;helpers.mts -->
<g id="node20" class="node">
<title>src/parse/parser&#45;helpers.mts</title>
<g id="a_node20"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/parser-helpers.mts" xlink:title="parser&#45;helpers.mts">
<path fill="#ffccff" stroke="black" d="M861.33,-656C861.33,-656 780.17,-656 780.17,-656 775.83,-656 771.5,-651.67 771.5,-647.33 771.5,-647.33 771.5,-638.67 771.5,-638.67 771.5,-634.33 775.83,-630 780.17,-630 780.17,-630 861.33,-630 861.33,-630 865.67,-630 870,-634.33 870,-638.67 870,-638.67 870,-647.33 870,-647.33 870,-651.67 865.67,-656 861.33,-656"/>
<text text-anchor="start" x="800.88" y="-644.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/</text>
<text text-anchor="start" x="779.5" y="-635.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">parser&#45;helpers.mts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/parse/parser&#45;helpers.mts -->
<g id="edge29" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/parse/parser&#45;helpers.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M683.45,-674.5C689.91,-674.5 694.5,-674.5 694.5,-674.5 694.5,-674.5 694.5,-647.33 694.5,-647.33 694.5,-647.33 762.19,-647.33 762.19,-647.33"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="762.19,-649.43 768.19,-647.33 762.19,-645.23 762.19,-649.43"/>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/transform/utl.mts -->
<g id="edge28" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/transform/utl.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M683.45,-681C700.99,-681 717.5,-681 717.5,-681 717.5,-681 717.5,-572.5 717.5,-572.5 717.5,-572.5 775.9,-572.5 775.9,-572.5"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="775.9,-574.6 781.9,-572.5 775.9,-570.4 775.9,-574.6"/>
</g>
<!-- src/parse/scxml/normalize&#45;machine.mts -->
<g id="node23" class="node">
<title>src/parse/scxml/normalize&#45;machine.mts</title>
<g id="a_node23"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/normalize-machine.mts" xlink:title="normalize&#45;machine.mts">
<path fill="#ffccff" stroke="black" d="M870.33,-694C870.33,-694 771.17,-694 771.17,-694 766.83,-694 762.5,-689.67 762.5,-685.33 762.5,-685.33 762.5,-676.67 762.5,-676.67 762.5,-672.33 766.83,-668 771.17,-668 771.17,-668 870.33,-668 870.33,-668 874.67,-668 879,-672.33 879,-676.67 879,-676.67 879,-685.33 879,-685.33 879,-689.67 874.67,-694 870.33,-694"/>
<text text-anchor="start" x="788.12" y="-682.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/scxml/</text>
<text text-anchor="start" x="770.5" y="-673.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">normalize&#45;machine.mts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/normalize&#45;machine.mts -->
<g id="edge30" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/normalize&#45;machine.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M683.3,-687.5C683.3,-687.5 753.07,-687.5 753.07,-687.5"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="753.07,-689.6 759.07,-687.5 753.07,-685.4 753.07,-689.6"/>
</g>
<!-- src/parse/scxml/utl.mts -->
<g id="node24" class="node">
<title>src/parse/scxml/utl.mts</title>
<g id="a_node24"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/utl.mts" xlink:title="utl.mts">
<path fill="#ffccff" stroke="black" d="M1019.08,-726C1019.08,-726 955.17,-726 955.17,-726 950.83,-726 946.5,-721.67 946.5,-717.33 946.5,-717.33 946.5,-708.67 946.5,-708.67 946.5,-704.33 950.83,-700 955.17,-700 955.17,-700 1019.08,-700 1019.08,-700 1023.42,-700 1027.75,-704.33 1027.75,-708.67 1027.75,-708.67 1027.75,-717.33 1027.75,-717.33 1027.75,-721.67 1023.42,-726 1019.08,-726"/>
<text text-anchor="start" x="954.5" y="-714.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/scxml/</text>
<text text-anchor="start" x="972.5" y="-705.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">utl.mts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/utl.mts -->
<g id="edge31" class="edge">
<title>src/parse/scxml/index.mjs&#45;&gt;src/parse/scxml/utl.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M642.5,-694.12C642.5,-704.52 642.5,-717.33 642.5,-717.33 642.5,-717.33 937.21,-717.33 937.21,-717.33"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="937.21,-719.43 943.21,-717.33 937.21,-715.23 937.21,-719.43"/>
</g>
<!-- src/parse/smcat/smcat&#45;parser.mjs&#45;&gt;src/parse/parser&#45;helpers.mts -->
<g id="edge34" class="edge">
<title>src/parse/smcat/smcat&#45;parser.mjs&#45;&gt;src/parse/parser&#45;helpers.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M688.31,-638.67C688.31,-638.67 762.19,-638.67 762.19,-638.67"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="762.19,-640.77 768.19,-638.67 762.19,-636.57 762.19,-640.77"/>
</g>
<!-- src/parse/parser&#45;helpers.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge27" class="edge">
<title>src/parse/parser&#45;helpers.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M862.5,-629.77C862.5,-585.6 862.5,-446 862.5,-446 862.5,-446 1228.93,-446 1228.93,-446"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1228.93,-448.1 1234.93,-446 1228.93,-443.9 1228.93,-448.1"/>
</g>
<!-- src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/utl.mts -->
<g id="edge33" class="edge">
<title>src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/utl.mts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M821.5,-694.19C821.5,-701.31 821.5,-708.67 821.5,-708.67 821.5,-708.67 937.16,-708.67 937.16,-708.67"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="937.16,-710.77 943.16,-708.67 937.16,-706.57 937.16,-710.77"/>
</g>
<!-- src/parse/scxml/scxml.d.ts -->
<g id="node25" class="node">
<title>src/parse/scxml/scxml.d.ts</title>
<g id="a_node25"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/parse/scxml/scxml.d.ts" xlink:title="scxml.d.ts">
<path fill="#ffccff" stroke="none" d="M1019.08,-688C1019.08,-688 955.17,-688 955.17,-688 950.83,-688 946.5,-683.67 946.5,-679.33 946.5,-679.33 946.5,-670.67 946.5,-670.67 946.5,-666.33 950.83,-662 955.17,-662 955.17,-662 1019.08,-662 1019.08,-662 1023.42,-662 1027.75,-666.33 1027.75,-670.67 1027.75,-670.67 1027.75,-679.33 1027.75,-679.33 1027.75,-683.67 1023.42,-688 1019.08,-688"/>
<text text-anchor="start" x="954.5" y="-676.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/parse/scxml/</text>
<text text-anchor="start" x="965" y="-667.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scxml.d.ts</text>
</a>
</g>
</g>
<!-- src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/scxml.d.ts -->
<g id="edge32" class="edge">
<title>src/parse/scxml/normalize&#45;machine.mts&#45;&gt;src/parse/scxml/scxml.d.ts</title>
<path fill="none" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" d="M879.41,-678C879.41,-678 937.19,-678 937.19,-678"/>
<polygon fill="#ff00ff" fill-opacity="0.466667" stroke="#ff00ff" stroke-width="2" stroke-opacity="0.466667" points="937.19,-680.1 943.19,-678 937.19,-675.9 937.19,-680.1"/>
</g>
<!-- src/render/dot/attributebuilder.mts -->
<g id="node26" class="node">
<title>src/render/dot/attributebuilder.mts</title>
<g id="a_node26"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/attributebuilder.mts" xlink:title="attributebuilder.mts">
<path fill="#ccccff" stroke="black" d="M1028.08,-166C1028.08,-166 946.17,-166 946.17,-166 941.83,-166 937.5,-161.67 937.5,-157.33 937.5,-157.33 937.5,-148.67 937.5,-148.67 937.5,-144.33 941.83,-140 946.17,-140 946.17,-140 1028.08,-140 1028.08,-140 1032.42,-140 1036.75,-144.33 1036.75,-148.67 1036.75,-148.67 1036.75,-157.33 1036.75,-157.33 1036.75,-161.67 1032.42,-166 1028.08,-166"/>
<text text-anchor="start" x="957.88" y="-154.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="945.5" y="-145.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">attributebuilder.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/counter.mts -->
<g id="node27" class="node">
<title>src/render/dot/counter.mts</title>
<g id="a_node27"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/counter.mts" xlink:title="counter.mts">
<path fill="#ccccff" stroke="black" d="M1015.71,-128C1015.71,-128 958.54,-128 958.54,-128 954.21,-128 949.88,-123.67 949.88,-119.33 949.88,-119.33 949.88,-110.67 949.88,-110.67 949.88,-106.33 954.21,-102 958.54,-102 958.54,-102 1015.71,-102 1015.71,-102 1020.04,-102 1024.38,-106.33 1024.38,-110.67 1024.38,-110.67 1024.38,-119.33 1024.38,-119.33 1024.38,-123.67 1020.04,-128 1015.71,-128"/>
<text text-anchor="start" x="957.88" y="-116.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="961.62" y="-107.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">counter.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/dot.states.template.js -->
<g id="node28" class="node">
<title>src/render/dot/dot.states.template.js</title>
<g id="a_node28"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/dot.states.template.js" xlink:title="dot.states.template.js">
<polygon fill="#ccccff" stroke="none" points="1202,-204 1093.75,-204 1093.75,-178 1202,-178 1202,-204"/>
<text text-anchor="start" x="1118.62" y="-192.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="1101.75" y="-183.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">dot.states.template.js</text>
</a>
</g>
</g>
<!-- src/render/dot/dot.template.js -->
<g id="node29" class="node">
<title>src/render/dot/dot.template.js</title>
<g id="a_node29"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/dot.template.js" xlink:title="dot.template.js">
<polygon fill="#ccccff" stroke="none" points="1187.38,-166 1108.38,-166 1108.38,-140 1187.38,-140 1187.38,-166"/>
<text text-anchor="start" x="1118.62" y="-154.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="1116.38" y="-145.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">dot.template.js</text>
</a>
</g>
</g>
<!-- src/render/dot/extended&#45;types.d.ts -->
<g id="node30" class="node">
<title>src/render/dot/extended&#45;types.d.ts</title>
<g id="a_node30"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/extended-types.d.ts" xlink:title="extended&#45;types.d.ts">
<path fill="#ccccff" stroke="none" d="M1189.58,-34C1189.58,-34 1106.17,-34 1106.17,-34 1101.83,-34 1097.5,-29.67 1097.5,-25.33 1097.5,-25.33 1097.5,-16.67 1097.5,-16.67 1097.5,-12.33 1101.83,-8 1106.17,-8 1106.17,-8 1189.58,-8 1189.58,-8 1193.92,-8 1198.25,-12.33 1198.25,-16.67 1198.25,-16.67 1198.25,-25.33 1198.25,-25.33 1198.25,-29.67 1193.92,-34 1189.58,-34"/>
<text text-anchor="start" x="1118.62" y="-22.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="1105.5" y="-13.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">extended&#45;types.d.ts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/options.mts -->
<g id="edge35" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M858.42,-201.33C872.66,-201.33 885.5,-201.33 885.5,-201.33 885.5,-201.33 885.5,-461.6 885.5,-461.6 885.5,-461.6 944.54,-461.6 944.54,-461.6"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.54,-463.7 950.54,-461.6 944.54,-459.5 944.54,-463.7"/>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge36" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M858.34,-198.67C874.39,-198.67 889.5,-198.67 889.5,-198.67 889.5,-198.67 889.5,-430 889.5,-430 889.5,-430 1228.82,-430 1228.82,-430"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1228.82,-432.1 1234.82,-430 1228.82,-427.9 1228.82,-432.1"/>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/render/dot/attributebuilder.mts -->
<g id="edge37" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/render/dot/attributebuilder.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M858.33,-193.33C883.67,-193.33 912.5,-193.33 912.5,-193.33 912.5,-193.33 912.5,-154 912.5,-154 912.5,-154 928.32,-154 928.32,-154"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="928.32,-156.1 934.32,-154 928.32,-151.9 928.32,-156.1"/>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/render/dot/counter.mts -->
<g id="edge38" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/render/dot/counter.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M858.3,-190.67C881.74,-190.67 907.5,-190.67 907.5,-190.67 907.5,-190.67 907.5,-115 907.5,-115 907.5,-115 940.62,-115 940.62,-115"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="940.62,-117.1 946.62,-115 940.62,-112.9 940.62,-117.1"/>
</g>
<!-- src/render/dot/render&#45;dot&#45;from&#45;ast.mts -->
<g id="node32" class="node">
<title>src/render/dot/render&#45;dot&#45;from&#45;ast.mts</title>
<g id="a_node32"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/render-dot-from-ast.mts" xlink:title="render&#45;dot&#45;from&#45;ast.mts">
<path fill="#ccccff" stroke="black" d="M1038.21,-204C1038.21,-204 936.04,-204 936.04,-204 931.71,-204 927.38,-199.67 927.38,-195.33 927.38,-195.33 927.38,-186.67 927.38,-186.67 927.38,-182.33 931.71,-178 936.04,-178 936.04,-178 1038.21,-178 1038.21,-178 1042.54,-178 1046.88,-182.33 1046.88,-186.67 1046.88,-186.67 1046.88,-195.33 1046.88,-195.33 1046.88,-199.67 1042.54,-204 1038.21,-204"/>
<text text-anchor="start" x="957.88" y="-192.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="935.38" y="-183.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">render&#45;dot&#45;from&#45;ast.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/render/dot/render&#45;dot&#45;from&#45;ast.mts -->
<g id="edge39" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/render/dot/render&#45;dot&#45;from&#45;ast.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M858.09,-196C858.09,-196 918.03,-196 918.03,-196"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="918.03,-198.1 924.03,-196 918.03,-193.9 918.03,-198.1"/>
</g>
<!-- src/render/dot/state&#45;transformers.mts -->
<g id="node33" class="node">
<title>src/render/dot/state&#45;transformers.mts</title>
<g id="a_node33"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/state-transformers.mts" xlink:title="state&#45;transformers.mts">
<path fill="#ccccff" stroke="black" d="M1036.71,-26C1036.71,-26 937.54,-26 937.54,-26 933.21,-26 928.88,-21.67 928.88,-17.33 928.88,-17.33 928.88,-8.67 928.88,-8.67 928.88,-4.33 933.21,0 937.54,0 937.54,0 1036.71,0 1036.71,0 1041.04,0 1045.38,-4.33 1045.38,-8.67 1045.38,-8.67 1045.38,-17.33 1045.38,-17.33 1045.38,-21.67 1041.04,-26 1036.71,-26"/>
<text text-anchor="start" x="957.88" y="-14.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="936.88" y="-5.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">state&#45;transformers.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/render/dot/state&#45;transformers.mts -->
<g id="edge40" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/render/dot/state&#45;transformers.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M858.49,-182.67C876.63,-182.67 894.5,-182.67 894.5,-182.67 894.5,-182.67 894.5,-13 894.5,-13 894.5,-13 919.44,-13 919.44,-13"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="919.44,-15.1 925.44,-13 919.44,-10.9 919.44,-15.1"/>
</g>
<!-- src/render/dot/transition&#45;transformers.mts -->
<g id="node34" class="node">
<title>src/render/dot/transition&#45;transformers.mts</title>
<g id="a_node34"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/transition-transformers.mts" xlink:title="transition&#45;transformers.mts">
<path fill="#ccccff" stroke="black" d="M1046.08,-64C1046.08,-64 928.17,-64 928.17,-64 923.83,-64 919.5,-59.67 919.5,-55.33 919.5,-55.33 919.5,-46.67 919.5,-46.67 919.5,-42.33 923.83,-38 928.17,-38 928.17,-38 1046.08,-38 1046.08,-38 1050.42,-38 1054.75,-42.33 1054.75,-46.67 1054.75,-46.67 1054.75,-55.33 1054.75,-55.33 1054.75,-59.67 1050.42,-64 1046.08,-64"/>
<text text-anchor="start" x="957.88" y="-52.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="927.5" y="-43.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">transition&#45;transformers.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/render/dot/transition&#45;transformers.mts -->
<g id="edge41" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/render/dot/transition&#45;transformers.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M858.26,-185.33C878.14,-185.33 898.5,-185.33 898.5,-185.33 898.5,-185.33 898.5,-51 898.5,-51 898.5,-51 910.03,-51 910.03,-51"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="910.03,-53.1 916.03,-51 910.03,-48.9 910.03,-53.1"/>
</g>
<!-- src/render/dot/utl.mts -->
<g id="node35" class="node">
<title>src/render/dot/utl.mts</title>
<g id="a_node35"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/dot/utl.mts" xlink:title="utl.mts">
<path fill="#ccccff" stroke="black" d="M1176.46,-80C1176.46,-80 1119.29,-80 1119.29,-80 1114.96,-80 1110.62,-75.67 1110.62,-71.33 1110.62,-71.33 1110.62,-62.67 1110.62,-62.67 1110.62,-58.33 1114.96,-54 1119.29,-54 1119.29,-54 1176.46,-54 1176.46,-54 1180.79,-54 1185.12,-58.33 1185.12,-62.67 1185.12,-62.67 1185.12,-71.33 1185.12,-71.33 1185.12,-75.67 1180.79,-80 1176.46,-80"/>
<text text-anchor="start" x="1118.62" y="-68.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/dot/</text>
<text text-anchor="start" x="1133.25" y="-59.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">utl.mts</text>
</a>
</g>
</g>
<!-- src/render/dot/index.mjs&#45;&gt;src/render/dot/utl.mts -->
<g id="edge42" class="edge">
<title>src/render/dot/index.mjs&#45;&gt;src/render/dot/utl.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M858.25,-188C880.15,-188 903.5,-188 903.5,-188 903.5,-188 903.5,-72 903.5,-72 903.5,-72 1101.2,-72 1101.2,-72"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1101.2,-74.1 1107.2,-72 1101.2,-69.9 1101.2,-74.1"/>
</g>
<!-- src/render/dot/render&#45;dot&#45;from&#45;ast.mts&#45;&gt;src/render/dot/dot.states.template.js -->
<g id="edge43" class="edge">
<title>src/render/dot/render&#45;dot&#45;from&#45;ast.mts&#45;&gt;src/render/dot/dot.states.template.js</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M1046.98,-191C1046.98,-191 1084.25,-191 1084.25,-191"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1084.25,-193.1 1090.25,-191 1084.25,-188.9 1084.25,-193.1"/>
</g>
<!-- src/render/dot/render&#45;dot&#45;from&#45;ast.mts&#45;&gt;src/render/dot/dot.template.js -->
<g id="edge44" class="edge">
<title>src/render/dot/render&#45;dot&#45;from&#45;ast.mts&#45;&gt;src/render/dot/dot.template.js</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M1042.5,-177.71C1042.5,-166.75 1042.5,-153 1042.5,-153 1042.5,-153 1099.01,-153 1099.01,-153"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1099.01,-155.1 1105.01,-153 1099.01,-150.9 1099.01,-155.1"/>
</g>
<!-- src/render/dot/state&#45;transformers.mts&#45;&gt;src/render/dot/extended&#45;types.d.ts -->
<g id="edge45" class="edge">
<title>src/render/dot/state&#45;transformers.mts&#45;&gt;src/render/dot/extended&#45;types.d.ts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M1045.61,-14C1045.61,-14 1088.1,-14 1088.1,-14"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1088.1,-16.1 1094.1,-14 1088.1,-11.9 1088.1,-16.1"/>
</g>
<!-- src/render/dot/state&#45;transformers.mts&#45;&gt;src/render/dot/utl.mts -->
<g id="edge46" class="edge">
<title>src/render/dot/state&#45;transformers.mts&#45;&gt;src/render/dot/utl.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M1045.74,-20C1062.59,-20 1076.5,-20 1076.5,-20 1076.5,-20 1076.5,-57.33 1076.5,-57.33 1076.5,-57.33 1101.49,-57.33 1101.49,-57.33"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1101.49,-59.43 1107.49,-57.33 1101.49,-55.23 1101.49,-59.43"/>
</g>
<!-- src/render/dot/transition&#45;transformers.mts&#45;&gt;src/render/dot/extended&#45;types.d.ts -->
<g id="edge47" class="edge">
<title>src/render/dot/transition&#45;transformers.mts&#45;&gt;src/render/dot/extended&#45;types.d.ts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M1050.5,-37.58C1050.5,-33.47 1050.5,-30 1050.5,-30 1050.5,-30 1088.16,-30 1088.16,-30"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1088.16,-32.1 1094.16,-30 1088.16,-27.9 1088.16,-32.1"/>
</g>
<!-- src/render/dot/transition&#45;transformers.mts&#45;&gt;src/render/dot/utl.mts -->
<g id="edge48" class="edge">
<title>src/render/dot/transition&#45;transformers.mts&#45;&gt;src/render/dot/utl.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M1054.83,-60.67C1054.83,-60.67 1101.45,-60.67 1101.45,-60.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="1101.45,-62.77 1107.45,-60.67 1101.45,-58.57 1101.45,-62.77"/>
</g>
<!-- src/render/dot/utl.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge49" class="edge">
<title>src/render/dot/utl.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M1185.34,-67C1236.65,-67 1322.5,-67 1322.5,-67 1322.5,-67 1322.5,-416.73 1322.5,-416.73"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1320.4,-416.73 1322.5,-422.73 1324.6,-416.73 1320.4,-416.73"/>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/state&#45;machine&#45;model.mts -->
<g id="edge61" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/state&#45;machine&#45;model.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M864.83,-313C979.9,-313 1280.5,-313 1280.5,-313 1280.5,-313 1280.5,-416.49 1280.5,-416.49"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="1278.4,-416.49 1280.5,-422.49 1282.6,-416.49 1278.4,-416.49"/>
</g>
<!-- src/render/scjson/make&#45;valid&#45;event&#45;names.mts -->
<g id="node41" class="node">
<title>src/render/scjson/make&#45;valid&#45;event&#45;names.mts</title>
<g id="a_node41"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/make-valid-event-names.mts" xlink:title="make&#45;valid&#45;event&#45;names.mts">
<path fill="#ccccff" stroke="black" d="M1049.08,-420C1049.08,-420 925.17,-420 925.17,-420 920.83,-420 916.5,-415.67 916.5,-411.33 916.5,-411.33 916.5,-402.67 916.5,-402.67 916.5,-398.33 920.83,-394 925.17,-394 925.17,-394 1049.08,-394 1049.08,-394 1053.42,-394 1057.75,-398.33 1057.75,-402.67 1057.75,-402.67 1057.75,-411.33 1057.75,-411.33 1057.75,-415.67 1053.42,-420 1049.08,-420"/>
<text text-anchor="start" x="951.12" y="-408.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scjson/</text>
<text text-anchor="start" x="924.5" y="-399.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">make&#45;valid&#45;event&#45;names.mts</text>
</a>
</g>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;event&#45;names.mts -->
<g id="edge62" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;event&#45;names.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M865.14,-330C870.71,-330 874.5,-330 874.5,-330 874.5,-330 874.5,-409 874.5,-409 874.5,-409 907.09,-409 907.09,-409"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="907.09,-411.1 913.09,-409 907.09,-406.9 907.09,-411.1"/>
</g>
<!-- src/render/scjson/make&#45;valid&#45;xml&#45;name.mts -->
<g id="node42" class="node">
<title>src/render/scjson/make&#45;valid&#45;xml&#45;name.mts</title>
<g id="a_node42"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/make-valid-xml-name.mts" xlink:title="make&#45;valid&#45;xml&#45;name.mts">
<path fill="#ccccff" stroke="black" d="M1042.33,-382C1042.33,-382 931.92,-382 931.92,-382 927.58,-382 923.25,-377.67 923.25,-373.33 923.25,-373.33 923.25,-364.67 923.25,-364.67 923.25,-360.33 927.58,-356 931.92,-356 931.92,-356 1042.33,-356 1042.33,-356 1046.67,-356 1051,-360.33 1051,-364.67 1051,-364.67 1051,-373.33 1051,-373.33 1051,-377.67 1046.67,-382 1042.33,-382"/>
<text text-anchor="start" x="951.12" y="-370.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scjson/</text>
<text text-anchor="start" x="931.25" y="-361.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">make&#45;valid&#45;xml&#45;name.mts</text>
</a>
</g>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;xml&#45;name.mts -->
<g id="edge63" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/render/scjson/make&#45;valid&#45;xml&#45;name.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M865.12,-326C897.41,-326 935.5,-326 935.5,-326 935.5,-326 935.5,-346.84 935.5,-346.84"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="933.4,-346.84 935.5,-352.84 937.6,-346.84 933.4,-346.84"/>
</g>
<!-- src/render/scjson/scjson.d.ts -->
<g id="node43" class="node">
<title>src/render/scjson/scjson.d.ts</title>
<g id="a_node43"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scjson/scjson.d.ts" xlink:title="scjson.d.ts">
<path fill="#ccccff" stroke="none" d="M1022.46,-344C1022.46,-344 951.79,-344 951.79,-344 947.46,-344 943.12,-339.67 943.12,-335.33 943.12,-335.33 943.12,-326.67 943.12,-326.67 943.12,-322.33 947.46,-318 951.79,-318 951.79,-318 1022.46,-318 1022.46,-318 1026.79,-318 1031.12,-322.33 1031.12,-326.67 1031.12,-326.67 1031.12,-335.33 1031.12,-335.33 1031.12,-339.67 1026.79,-344 1022.46,-344"/>
<text text-anchor="start" x="951.12" y="-332.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scjson/</text>
<text text-anchor="start" x="963.88" y="-323.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scjson.d.ts</text>
</a>
</g>
</g>
<!-- src/render/scjson/index.mts&#45;&gt;src/render/scjson/scjson.d.ts -->
<g id="edge64" class="edge">
<title>src/render/scjson/index.mts&#45;&gt;src/render/scjson/scjson.d.ts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M864.9,-322C864.9,-322 933.74,-322 933.74,-322"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="933.74,-324.1 939.74,-322 933.74,-319.9 933.74,-324.1"/>
</g>
<!-- src/render/scxml/index.mts&#45;&gt;src/render/scjson/index.mts -->
<g id="edge65" class="edge">
<title>src/render/scxml/index.mts&#45;&gt;src/render/scjson/index.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M642.5,-296.22C642.5,-305.22 642.5,-315.5 642.5,-315.5 642.5,-315.5 767.66,-315.5 767.66,-315.5"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="767.66,-317.6 773.66,-315.5 767.66,-313.4 767.66,-317.6"/>
</g>
<!-- src/render/scxml/render&#45;from&#45;scjson.mjs -->
<g id="node44" class="node">
<title>src/render/scxml/render&#45;from&#45;scjson.mjs</title>
<g id="a_node44"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scxml/render-from-scjson.mjs" xlink:title="render&#45;from&#45;scjson.mjs">
<path fill="#ccccff" stroke="black" d="M870.71,-296C870.71,-296 770.79,-296 770.79,-296 766.46,-296 762.12,-291.67 762.12,-287.33 762.12,-287.33 762.12,-278.67 762.12,-278.67 762.12,-274.33 766.46,-270 770.79,-270 770.79,-270 870.71,-270 870.71,-270 875.04,-270 879.38,-274.33 879.38,-278.67 879.38,-278.67 879.38,-287.33 879.38,-287.33 879.38,-291.67 875.04,-296 870.71,-296"/>
<text text-anchor="start" x="786.25" y="-284.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scxml/</text>
<text text-anchor="start" x="770.12" y="-275.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">render&#45;from&#45;scjson.mjs</text>
</a>
</g>
</g>
<!-- src/render/scxml/index.mts&#45;&gt;src/render/scxml/render&#45;from&#45;scjson.mjs -->
<g id="edge66" class="edge">
<title>src/render/scxml/index.mts&#45;&gt;src/render/scxml/render&#45;from&#45;scjson.mjs</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M685.1,-283C685.1,-283 752.82,-283 752.82,-283"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="752.82,-285.1 758.82,-283 752.82,-280.9 752.82,-285.1"/>
</g>
<!-- src/render/smcat/smcat.template.js -->
<g id="node47" class="node">
<title>src/render/smcat/smcat.template.js</title>
<g id="a_node47"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/smcat/smcat.template.js" xlink:title="smcat.template.js">
<polygon fill="#ccccff" stroke="none" points="867,-424 774.5,-424 774.5,-398 867,-398 867,-424"/>
<text text-anchor="start" x="785.88" y="-412.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/smcat/</text>
<text text-anchor="start" x="782.5" y="-403.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">smcat.template.js</text>
</a>
</g>
</g>
<!-- src/render/smcat/index.mts&#45;&gt;src/render/smcat/smcat.template.js -->
<g id="edge69" class="edge">
<title>src/render/smcat/index.mts&#45;&gt;src/render/smcat/smcat.template.js</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M642.5,-398.49C642.5,-403.81 642.5,-408.67 642.5,-408.67 642.5,-408.67 765.36,-408.67 765.36,-408.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="765.36,-410.77 771.36,-408.67 765.36,-406.57 765.36,-410.77"/>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/options.mts -->
<g id="edge70" class="edge">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M708.5,-206.5C708.5,-261.42 708.5,-465.2 708.5,-465.2 708.5,-465.2 944.49,-465.2 944.49,-465.2"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.49,-467.3 950.49,-465.2 944.49,-463.1 944.49,-467.3"/>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/dot/index.mjs -->
<g id="edge71" class="edge">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/dot/index.mjs</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M725.3,-188.67C725.3,-188.67 773.98,-188.67 773.98,-188.67"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="773.98,-190.77 779.98,-188.67 773.98,-186.57 773.98,-190.77"/>
</g>
<!-- src/render/vector/dot&#45;to&#45;vector&#45;native.mts -->
<g id="node48" class="node">
<title>src/render/vector/dot&#45;to&#45;vector&#45;native.mts</title>
<g id="a_node48"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/vector/dot-to-vector-native.mts" xlink:title="dot&#45;to&#45;vector&#45;native.mts">
<path fill="#ccccff" stroke="black" d="M871.83,-168C871.83,-168 769.67,-168 769.67,-168 765.33,-168 761,-163.67 761,-159.33 761,-159.33 761,-150.67 761,-150.67 761,-146.33 765.33,-142 769.67,-142 769.67,-142 871.83,-142 871.83,-142 876.17,-142 880.5,-146.33 880.5,-150.67 880.5,-150.67 880.5,-159.33 880.5,-159.33 880.5,-163.67 876.17,-168 871.83,-168"/>
<text text-anchor="start" x="785.5" y="-156.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/vector/</text>
<text text-anchor="start" x="769" y="-147.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">dot&#45;to&#45;vector&#45;native.mts</text>
</a>
</g>
</g>
<!-- src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/vector/dot&#45;to&#45;vector&#45;native.mts -->
<g id="edge72" class="edge">
<title>src/render/vector/vector&#45;native&#45;dot&#45;with&#45;fallback.mts&#45;&gt;src/render/vector/dot&#45;to&#45;vector&#45;native.mts</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M725.42,-184.33C751.44,-184.33 773.5,-184.33 773.5,-184.33 773.5,-184.33 773.5,-177.32 773.5,-177.32"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="775.6,-177.32 773.5,-171.32 771.4,-177.32 775.6,-177.32"/>
</g>
<!-- src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/options.mts -->
<g id="edge73" class="edge">
<title>src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/options.mts</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" d="M692.5,-360.03C692.5,-391.46 692.5,-468.8 692.5,-468.8 692.5,-468.8 944.59,-468.8 944.59,-468.8"/>
<polygon fill="#000000" fill-opacity="0.200000" stroke="#000000" stroke-width="2" stroke-opacity="0.200000" points="944.59,-470.9 950.59,-468.8 944.59,-466.7 944.59,-470.9"/>
</g>
<!-- src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/render/dot/index.mjs -->
<g id="edge74" class="edge">
<title>src/render/vector/vector&#45;with&#45;wasm.mts&#45;&gt;src/render/dot/index.mjs</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" d="M698.26,-339C721.65,-339 743.5,-339 743.5,-339 743.5,-339 743.5,-197.33 743.5,-197.33 743.5,-197.33 774,-197.33 774,-197.33"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="774,-199.43 780,-197.33 774,-195.23 774,-199.43"/>
</g>
<!-- src/render/scxml/scxml.states.template.js -->
<g id="node45" class="node">
<title>src/render/scxml/scxml.states.template.js</title>
<g id="a_node45"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scxml/scxml.states.template.js" xlink:title="scxml.states.template.js">
<polygon fill="#ccccff" stroke="none" points="1047.62,-306 926.62,-306 926.62,-280 1047.62,-280 1047.62,-306"/>
<text text-anchor="start" x="952.62" y="-294.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scxml/</text>
<text text-anchor="start" x="934.62" y="-285.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scxml.states.template.js</text>
</a>
</g>
</g>
<!-- src/render/scxml/render&#45;from&#45;scjson.mjs&#45;&gt;src/render/scxml/scxml.states.template.js -->
<g id="edge67" class="edge">
<title>src/render/scxml/render&#45;from&#45;scjson.mjs&#45;&gt;src/render/scxml/scxml.states.template.js</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M879.41,-288C879.41,-288 917.16,-288 917.16,-288"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="917.16,-290.1 923.16,-288 917.16,-285.9 917.16,-290.1"/>
</g>
<!-- src/render/scxml/scxml.template.js -->
<g id="node46" class="node">
<title>src/render/scxml/scxml.template.js</title>
<g id="a_node46"><a xlink:href="https://github.com/sverweij/state-machine-cat/blob/main/src/render/scxml/scxml.template.js" xlink:title="scxml.template.js">
<polygon fill="#ccccff" stroke="none" points="1033,-268 941.25,-268 941.25,-242 1033,-242 1033,-268"/>
<text text-anchor="start" x="952.62" y="-256.45" font-family="Helvetica,sans-Serif" font-size="9.00">src/render/scxml/</text>
<text text-anchor="start" x="949.25" y="-247.45" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="9.00">scxml.template.js</text>
</a>
</g>
</g>
<!-- src/render/scxml/render&#45;from&#45;scjson.mjs&#45;&gt;src/render/scxml/scxml.template.js -->
<g id="edge68" class="edge">
<title>src/render/scxml/render&#45;from&#45;scjson.mjs&#45;&gt;src/render/scxml/scxml.template.js</title>
<path fill="none" stroke="#0000ff" stroke-width="2" stroke-dasharray="5,2" stroke-opacity="0.466667" d="M869.5,-269.66C869.5,-262.44 869.5,-255 869.5,-255 869.5,-255 931.95,-255 931.95,-255"/>
<polygon fill="#0000ff" fill-opacity="0.466667" stroke="#0000ff" stroke-width="2" stroke-opacity="0.466667" points="931.95,-257.1 937.95,-255 931.95,-252.9 931.95,-257.1"/>
</g>
</g>
</svg>
    <script>
      var gMode = new Mode();

var title2ElementMap = (function makeElementMap() {
  /** @type {NodeListOf<SVGGElement>} */
  var nodes = document.querySelectorAll(".node");
  /** @type {NodeListOf<SVGGElement>} */
  var edges = document.querySelectorAll(".edge");
  return new Title2ElementMap(edges, nodes);
})();

function getHoverHandler(pTitle2ElementMap) {
  /** @type {string} */
  var currentHighlightedTitle = "";

  /** @param {MouseEvent} pMouseEvent */
  return function hoverHighlightHandler(pMouseEvent) {
    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (
      !(currentHighlightedTitle === closestTitleText) &&
      gMode.get() === gMode.HOVER
    ) {
      resetNodesAndEdges();
      addHighlight(closestNodeOrEdge);
      pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}

function getSelectHandler(pTitle2ElementMap) {
  /** @type {string} */
  var currentHighlightedTitle = "";

  /** @param {MouseEvent} pMouseEvent */
  return function selectHighlightHandler(pMouseEvent) {
    pMouseEvent.preventDefault();

    var closestNodeOrEdge = pMouseEvent.target.closest(".edge, .node");
    var closestTitleText = getTitleText(closestNodeOrEdge);

    if (!!closestNodeOrEdge) {
      gMode.setToSelect();
    } else {
      gMode.setToHover();
    }
    if (!(currentHighlightedTitle === closestTitleText)) {
      resetNodesAndEdges();
      addHighlight(closestNodeOrEdge);
      pTitle2ElementMap.get(closestTitleText).forEach(addHighlight);
      currentHighlightedTitle = closestTitleText;
    }
  };
}
function Mode() {
  var HOVER = 1;
  var SELECT = 2;

  function setToHover() {
    this._mode = HOVER;
  }
  function setToSelect() {
    this._mode = SELECT;
  }

  /**
   * @returns {number}
   */
  function get() {
    return this._mode || HOVER;
  }

  return {
    HOVER: HOVER,
    SELECT: SELECT,
    setToHover: setToHover,
    setToSelect: setToSelect,
    get: get,
  };
}

/**
 *
 * @param {SVGGelement[]} pEdges
 * @param {SVGGElement[]} pNodes
 * @return {{get: (pTitleText:string) => SVGGElement[]}}
 */
function Title2ElementMap(pEdges, pNodes) {
  /* {{[key: string]: SVGGElement[]}} */
  var elementMap = buildMap(pEdges, pNodes);

  /**
   * @param {NodeListOf<SVGGElement>} pEdges
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement[]}}
   */
  function buildMap(pEdges, pNodes) {
    var title2NodeMap = buildTitle2NodeMap(pNodes);

    return nodeListToArray(pEdges).reduce(addEdgeToMap(title2NodeMap), {});
  }
  /**
   * @param {NodeListOf<SVGGElement>} pNodes
   * @return {{[key: string]: SVGGElement}}
   */
  function buildTitle2NodeMap(pNodes) {
    return nodeListToArray(pNodes).reduce(addNodeToMap, {});
  }

  function addNodeToMap(pMap, pNode) {
    var titleText = getTitleText(pNode);

    if (titleText) {
      pMap[titleText] = pNode;
    }
    return pMap;
  }

  function addEdgeToMap(pNodeMap) {
    return function (pEdgeMap, pEdge) {
      /** @type {string} */
      var titleText = getTitleText(pEdge);

      if (titleText) {
        var edge = pryEdgeFromTitle(titleText);

        pEdgeMap[titleText] = [pNodeMap[edge.from], pNodeMap[edge.to]];
        (pEdgeMap[edge.from] || (pEdgeMap[edge.from] = [])).push(pEdge);
        (pEdgeMap[edge.to] || (pEdgeMap[edge.to] = [])).push(pEdge);
      }
      return pEdgeMap;
    };
  }

  /**
   *
   * @param {string} pString
   * @return {{from?: string; to?:string;}}
   */
  function pryEdgeFromTitle(pString) {
    var nodeNames = pString.split(/\s*->\s*/);

    return {
      from: nodeNames.shift(),
      to: nodeNames.shift(),
    };
  }
  /**
   *
   * @param {string} pTitleText
   * @return {SVGGElement[]}
   */
  function get(pTitleText) {
    return (pTitleText && elementMap[pTitleText]) || [];
  }
  return {
    get: get,
  };
}

/**
 * @param {SVGGElement} pGElement
 * @return {string?}
 */
function getTitleText(pGElement) {
  /** @type {SVGTitleElement} */
  var title = pGElement && pGElement.querySelector("title");
  /** @type {string} */
  var titleText = title && title.textContent;

  if (titleText) {
    titleText = titleText.trim();
  }
  return titleText;
}

/**
 * @param {NodeListOf<Element>} pNodeList
 * @return {Element[]}
 */
function nodeListToArray(pNodeList) {
  var lReturnValue = [];

  pNodeList.forEach(function (pElement) {
    lReturnValue.push(pElement);
  });

  return lReturnValue;
}

function resetNodesAndEdges() {
  nodeListToArray(document.querySelectorAll(".current")).forEach(
    removeHighlight,
  );
}

/**
 * @param {SVGGElement} pGElement
 */
function removeHighlight(pGElement) {
  if (pGElement && pGElement.classList) {
    pGElement.classList.remove("current");
  }
}

/**
 * @param {SVGGElement} pGroup
 */
function addHighlight(pGroup) {
  if (pGroup && pGroup.classList) {
    pGroup.classList.add("current");
  }
}

var gHints = {
  HIDDEN: 1,
  SHOWN: 2,
  state: this.HIDDEN,
  show: function () {
    document.getElementById("hints").removeAttribute("style");
    gHints.state = gHints.SHOWN;
  },
  hide: function () {
    document.getElementById("hints").style = "display:none";
    gHints.state = gHints.HIDDEN;
  },
  toggle: function () {
    if ((gHints.state || gHints.HIDDEN) === gHints.HIDDEN) {
      gHints.show();
    } else {
      gHints.hide();
    }
  },
};

/** @param {KeyboardEvent} pKeyboardEvent */
function keyboardEventHandler(pKeyboardEvent) {
  if (pKeyboardEvent.key === "Escape") {
    resetNodesAndEdges();
    gMode.setToHover();
    gHints.hide();
  }
  if (pKeyboardEvent.key === "F1") {
    pKeyboardEvent.preventDefault();
    gHints.toggle();
  }
}

document.addEventListener("contextmenu", getSelectHandler(title2ElementMap));
document.addEventListener("mouseover", getHoverHandler(title2ElementMap));
document.addEventListener("keydown", keyboardEventHandler);
document.getElementById("close-hints").addEventListener("click", gHints.hide);
document.getElementById("button_help").addEventListener("click", gHints.toggle);
document.querySelector("svg").insertAdjacentHTML(
  "afterbegin",
  `<linearGradient id="edgeGradient">
      <stop offset="0%" stop-color="fuchsia"/>
      <stop offset="100%" stop-color="purple"/>
   </linearGradient>
  `,
);

// Add a small increment to the last value of the path to make gradients on
// horizontal paths work. Without them all browsers I tested with (firefox,
// chrome) do not render the gradient, but instead make the line transparent
// (or the color of the background, I haven't looked into it that deeply,
// but for the hack it doesn't matter which).
function skewLineABit(lDrawingInstructions) {
  var lLastValue = lDrawingInstructions.match(/(\d+\.?\d*)$/)[0];
  // Smaller values than .001 _should_ work as well, but don't in all
  // cases. Even this value is so small that it is not visible to the
  // human eye (tested with the two I have at my disposal).
  var lIncrement = 0.001;
  var lNewLastValue = parseFloat(lLastValue) + lIncrement;

  return lDrawingInstructions.replace(lLastValue, lNewLastValue);
}

nodeListToArray(document.querySelectorAll("path"))
  .filter(function (pElement) {
    return pElement.parentElement.classList.contains("edge");
  })
  .forEach(function (pElement) {
    pElement.attributes.d.value = skewLineABit(pElement.attributes.d.value);
  });

    </script>
  </body>
</html>